package c_store

import (
	//"fmt"
	"gintest/models"
	"gintest/until"
	"github.com/gin-gonic/gin"
	/*"strconv"
	"strings"
	"time"*/
	"regexp"
	"strconv"
)
//接收数据
type Request struct{
	Phone string `json:"phone"` //手机号
	Code string `json:"code"`  //验证码
	PassWord string `json:"password"`//密码
}
/***
	登陆账号
	param phone 手机号
	      code 验证码
	return token 登陆凭证
*/
func External_login(c *gin.Context){
	var data Request
	if err:=c.ShouldBindJSON(&data) ;err!=nil {
		until.Fail(c,1,err.Error())
		return
	}
	//手机号验证
	reg := `^1([38][0-9]|14[579]|5[^4]|16[6]|7[1-35-8]|9[189])\d{8}$`
	rgx := regexp.MustCompile(reg)
	if !rgx.MatchString(data.Phone){
		until.Fail(c,1,"手机号码错误")
		return
	}
	
	//验证码位数验证
	if len(data.Code)!=6{
		until.Fail(c,1,"验证码错误")
		return
	}
	//验证码存在验证
	if err:=models.CheckCode(data.Code,data.Phone);err!=nil{
		until.Fail(c,1,err.Error())
		return
	}
	user:=models.GetStoreUserByPhone(data.Phone)
	if user.Id<=0{
		until.Fail(c,1,"用户未注册")
		return
	}
	//添加注册后自动登陆
	token:=until.Token{
		Id:user.Id,
		UserName:user.UserName,
		Phone:user.Phone,
		PassWord:user.PassWord,
		CreateAt:user.CreateAt,
		UpdateAt:user.UpdateAt,
		Status:0,
	}
	token_key:=until.PutToken(token,"store_")

	until.Success(c,gin.H{"token":token_key})
}
/***
	注册账号
	param phone 手机号
	      code 验证码
	return token 登陆凭证
*/
func External_register(c *gin.Context){
	var data Request
	if err:=c.ShouldBindJSON(&data) ;err!=nil {
		until.Fail(c,1,err.Error())
		return
	}
	//手机号验证
	reg := `^1([38][0-9]|14[579]|5[^4]|16[6]|7[1-35-8]|9[189])\d{8}$`
	rgx := regexp.MustCompile(reg)
	if !rgx.MatchString(data.Phone){
		until.Fail(c,1,"手机号码错误")
		return
	}
	//手机号唯一验证
	if models.UniquePhone(0,data.Phone)>0{
		until.Fail(c,1,"手机号码已注册")
		return
	}
	//验证码位数验证
	if len(data.Code)!=6{
		until.Fail(c,1,"验证码错误")
		return
	}
	//验证码存在验证
	if err:=models.CheckCode(data.Code,data.Phone);err!=nil{
		until.Fail(c,1,err.Error())
		return
	}
	user:=models.StoreUser{
		UserName:data.Phone,
		Phone:data.Phone,
	}
	if err:=models.AddStoreUser(&user);err!=nil{
		until.Fail(c,1,err.Error())
		return
	}
	//添加注册后自动登陆
	token:=until.Token{
		Id:user.Id,
		UserName:user.UserName,
		Phone:user.Phone,
		PassWord:user.PassWord,
		CreateAt:user.CreateAt,
		UpdateAt:user.UpdateAt,
		Status:0,
	}
	token_key:=until.PutToken(token,"store_")

	until.Success(c,gin.H{"token":token_key})
}
/***
	获取手机验证码
	param phone 手机号
	return json 
*/
func External_getcode(c *gin.Context){
	var data Request
	if err:=c.ShouldBindJSON(&data) ;err!=nil {
		until.Fail(c,1,err.Error())
		return
	}
	//手机号验证
	reg := `^1([38][0-9]|14[579]|5[^4]|16[6]|7[1-35-8]|9[189])\d{8}$`
	rgx := regexp.MustCompile(reg)
	if !rgx.MatchString(data.Phone){
		until.Fail(c,1,"手机号码错误")
		return
	}
	//生成验证码
	code:=""
	for i:=0;i<6;i++{
		code=code+strconv.FormatInt(until.RangeRand(1,9),10)
	}
	if err:=models.AddPhoneCode(code,data.Phone);err!=nil{
		until.Fail(c,1,"错误")
		return
	}
	until.Success(c, gin.H{"code":code})
}